Tim Caswell在node.js早期就做出很多貢獻(ex. Connect Middleware),他也創立了一個非常棒的node.js教學網站:how to node。除了node.js,裡面也有很多關於Javascript的文章。
以下分享幾篇他的文章,主要專注在Javascript的物件與繼承機制。(How To Node裡面還有關於其他主題的文章,作者也不只有Tim Caswell,不過都是node.js的神級人物,像是Isaac Z. Schlueter、TJ Holowaychuck等,Schlueter是npm的作者,TJ是express的作者)
Prototypal Inheritance
開頭講到了一些歷史...告訴你new跟constructor是因為Netscape希望Javascript長得更像Java才加上去的東西。接著示範用這兩個做classical OOP以及真正的prototypal OOP可以怎麼做。接下來繼續prototypal的展示,他寫了一個小函數spawn,並且示範怎樣用它來協助產生繼承父物件的新物件。
What is "this"?
Tim Caswell用一句話概括了this:"It's all about where you are.",簡單地說,在函數中,this是依照執行時的context決定的。理解了這個道理,使用this就比較不會出錯。
用物件圖學習Javascript
有三篇系列文章:
* Learning Javascript with Object Graphs
* Learning Javascript with Object Graphs (Part II)
* Learning Javascript with Object Graphs (Part III)
除了prototypal,Javascript有一個特色是Lexical Scope,相信有不少人在這裡吃過苦頭。Tim Caswell用來解說的物件圖,特別加入了[Scope]虛擬物件,這是規格中才會有的概念,不過可以協助釐清問題。第一篇主要是講物件與Global的狀況,第二篇主要在講prototype,第三篇則與Ruby做了一些比較。看完這三篇,對於Javascript的物件與繼承觀念應該會更清楚。
在Rhino直譯器中,可以使用函式上非標準的__parent__取得語彙範圍(Lexical Scope)建立時,包裹該函式的外部函式之呼叫物件,這會有助於理解....
http://caterpillar.onlyfun.net/Gossip/JavaScript/ScopeChain.html